package chapter_20;

import java.util.*;

/**
 * Created by Administrator
 * Created time 2018/8/8 17:29.
 * Map 集合
 */
public class MapTest {

    public static void main(String[] args) {

        /*
         * Map 集合由两个集合构成
         * 键(key)集合--Set 集合(不能有重复的元素)
         * 值(value)集合--Collection 集合(可以有重复的元素)
        */
        Map map = new HashMap();

        map.put(102,"张三");
        map.put(105,"李四");
        map.put(109,"王五");
        map.put(110,"董六");
        // "李四"值重复
        map.put(111,"李四");
        // 109 键已经存在,替换原来值"王五"
        map.put(109,"刘备");

        // 1.使用 for 循环遍历
        // Map的key为Set无序,无法取出某指定的值.
        for(int i = 0; i < map.size(); i++){
            // System.out.println("for 循环遍历读取集合元素:" + map.get(i));
        }

        // 2.使用 for each 循环遍历
        /*
         for each 遍历以 Map 的 key 为主
         1.首先将 key 值转换为 Set 集合
         2.然后通过遍历 Set 集合,利用 get() 方法取得相应的 value
        */
        Set keys = map.keySet();
        for (Object key : keys) {
            System.out.println("for each 循环遍历读取集合元素: key:[" + key +"],value:["+ map.get(key) + "]");
        }

        // 3.使用迭代器遍历
        /*
         迭代器遍历以 Map 的 value 为主
         1.首先将 value 值转换为 Collection 集合
         2.然后遍历 Collection 集合,取得相应的 value(此种方法无法取得 key 值)
         */
        Collection values = map.values();
        Iterator iterator = values.iterator();
        while (iterator.hasNext()){
            System.out.println("Iterator 迭代器遍历读取集合元素: value:[" + iterator.next() + "]");
        }
    }
}
